--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / networkVisualiserWebGLEngine.js
Displaying Raw • Download
meshchatx/src/frontend/js/networkVisualiserWebGLEngine.js c0b0ddffd735a0d007c1be9a5e8563ec42fdafc0 (c0b0ddff) Text, 21.68 KB
T8b949e/**
* WASM scene + WebGL2 engine for the network visualiser.
* Falls back is handled by the caller (vis-network path).
*/
Tff7b72import Tb4b4b4{ Te6edf3callVisualiserWasmJsonTb4b4b4, Te6edf3isVisualiserWebGLSceneReady Tb4b4b4} Tff7b72from Ta5d6ff"./VisualiserWasmLoader.js"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3lodLevelFromScale Tb4b4b4} Tff7b72from Ta5d6ff"./networkVisualiserPerf.js"Tb4b4b4;
Tff7b72import Tb4b4b4{
Te6edf3createNetworkVisualiserWebGLTb4b4b4,
Te6edf3mergeSceneNodesWithTexturesTb4b4b4,
Te6edf3NODE_STRIDETb4b4b4,
Te6edf3SCENE_NODE_STRIDETb4b4b4,
Te6edf3tryCreateWebGL2ContextTb4b4b4,
Tb4b4b4} Tff7b72from Ta5d6ff"./networkVisualiserWebGL.js"Tb4b4b4;
Tff7b72export Tb4b4b4{ Te6edf3isVisualiserWebGLSceneReady Tb4b4b4}Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3KIND_ME Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3KIND_IFACE_ON Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3KIND_IFACE_OFF Tff7b72= T79c0ff2Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3KIND_PEER Tff7b72= T79c0ff3Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3KIND_DISCOVERED Tff7b72= T79c0ff4Tb4b4b4;
T8b949e/** Max characters drawn on a WebGL node label before ellipsis. */
Tff7b72export Tff7b72const Te6edf3WEBGL_LABEL_MAX_CHARS Tff7b72= T79c0ff28Tb4b4b4;
T8b949e/**
* Truncate a node label for the WebGL overlay.
* @param {string|null|undefined} text
* @param {number} [maxChars]
* @returns {string|null}
*/
Tff7b72export Tff7b72function Te6edf3truncateWebGLLabelTb4b4b4(Te6edf3textTb4b4b4, Te6edf3maxChars Tff7b72= Te6edf3WEBGL_LABEL_MAX_CHARSTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3text Tff7b72!== Ta5d6ff"string" Tff7b72|| Tff7b72!Te6edf3textTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3limit Tff7b72= Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3maxCharsTb4b4b4) Tff7b72&& Te6edf3maxChars Tff7b72> T79c0ff1 Tff7b72? Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3maxCharsTb4b4b4) Tff7b72: Te6edf3WEBGL_LABEL_MAX_CHARSTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3textTb4b4b4.Te6edf3length Tff7b72<= Te6edf3limitTb4b4b4) Tff7b72return Te6edf3textTb4b4b4;
Tff7b72return Ta5d6ff`Tffd700${Te6edf3textTb4b4b4.Te6edf3sliceTb4b4b4(T79c0ff0Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3limit Tff7b72- T79c0ff3Tb4b4b4)Tb4b4b4)Tffd700}Ta5d6ff...Ta5d6ff`Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Build overlay labels using the same LOD bands as the vis-network canvas path.
* low: none, medium: me + hover only, high: all in-scene labels.
*
* @param {{
* zoom: number,
* sceneCount: number,
* nodes: Float32Array|number[]|null|undefined,
* labelByIndex: (string|null|undefined)[],
* idByIndex: (string|null|undefined)[],
* hoverId?: string|null,
* }} opts
* @returns {{x:number,y:number,size:number,text:string,fontSize:number}[]}
*/
Tff7b72export Tff7b72function Te6edf3collectWebGLLabelsTb4b4b4(Te6edf3optsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3zoom Tff7b72= Te6edf3optsTff7b72?Tb4b4b4.Te6edf3zoom Tff7b72> T79c0ff0 Tff7b72? Te6edf3optsTb4b4b4.Te6edf3zoom Tff7b72: T79c0ff1Tb4b4b4;
Tff7b72const Te6edf3lod Tff7b72= Te6edf3lodLevelFromScaleTb4b4b4(Te6edf3zoomTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3lod Tff7b72=== Ta5d6ff"low"Tb4b4b4) Tff7b72return Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3sceneCount Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3optsTff7b72?Tb4b4b4.Te6edf3sceneCount Tff7b72| T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3nodes Tff7b72= Te6edf3optsTff7b72?Tb4b4b4.Te6edf3nodesTb4b4b4;
Tff7b72const Te6edf3labelByIndex Tff7b72= Te6edf3optsTff7b72?Tb4b4b4.Te6edf3labelByIndex Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3idByIndex Tff7b72= Te6edf3optsTff7b72?Tb4b4b4.Te6edf3idByIndex Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3hoverId Tff7b72= Te6edf3optsTff7b72?Tb4b4b4.Te6edf3hoverId Tff7b72? Tffa657StringTb4b4b4(Te6edf3optsTb4b4b4.Te6edf3hoverIdTb4b4b4) Tff7b72: Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3out Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3sceneCountTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3id Tff7b72= Te6edf3idByIndexTb4b4b4[Te6edf3iTb4b4b4] Tff7b72!= Tff7b72null Tff7b72? Tffa657StringTb4b4b4(Te6edf3idByIndexTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4) Tff7b72: Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3isMe Tff7b72= Te6edf3id Tff7b72=== Ta5d6ff"me"Tb4b4b4;
Tff7b72const Te6edf3isHover Tff7b72= Te6edf3hoverId Tff7b72!= Tff7b72null Tff7b72&& Te6edf3id Tff7b72=== Te6edf3hoverIdTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3lod Tff7b72=== Ta5d6ff"medium" Tff7b72&& Tff7b72!Te6edf3isMe Tff7b72&& Tff7b72!Te6edf3isHoverTb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72const Te6edf3raw Tff7b72= Te6edf3labelByIndexTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3text Tff7b72= Te6edf3truncateWebGLLabelTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3textTb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72const Te6edf3o Tff7b72= Te6edf3i Tff7b72* Te6edf3SCENE_NODE_STRIDETb4b4b4;
Te6edf3outTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3xTff7b72: Te6edf3nodesTff7b72?Tb4b4b4.Tb4b4b4[Te6edf3oTb4b4b4] Tff7b72?? T79c0ff0Tb4b4b4,
Te6edf3yTff7b72: Te6edf3nodesTff7b72?Tb4b4b4.Tb4b4b4[Te6edf3o Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72?? T79c0ff0Tb4b4b4,
Te6edf3sizeTff7b72: Te6edf3nodesTff7b72?Tb4b4b4.Tb4b4b4[Te6edf3o Tff7b72+ T79c0ff2Tb4b4b4] Tff7b72?? T79c0ff10Tb4b4b4,
Te6edf3textTb4b4b4,
Te6edf3fontSizeTff7b72: Te6edf3isMe Tff7b72? T79c0ff16 Tff7b72: T79c0ff11Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3outTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3DEFAULT_ICON_BY_KIND Tff7b72= Tb4b4b4{
Tb4b4b4[Te6edf3KIND_METb4b4b4]Tff7b72: Ta5d6ff"/assets/images/reticulum_logo_512.png"Tb4b4b4,
Tb4b4b4[Te6edf3KIND_IFACE_ONTb4b4b4]Tff7b72: Ta5d6ff"/assets/images/network-visualiser/interface_connected.png"Tb4b4b4,
Tb4b4b4[Te6edf3KIND_IFACE_OFFTb4b4b4]Tff7b72: Ta5d6ff"/assets/images/network-visualiser/interface_disconnected.png"Tb4b4b4,
Tb4b4b4[Te6edf3KIND_PEERTb4b4b4]Tff7b72: Ta5d6ff"/assets/images/network-visualiser/user.png"Tb4b4b4,
Tb4b4b4[Te6edf3KIND_DISCOVEREDTb4b4b4]Tff7b72: Ta5d6ff"/assets/images/network-visualiser/interface_connected.png"Tb4b4b4,
Tb4b4b4}Tb4b4b4;
T8b949e/**
* Distance between two CSS points.
* @param {{x:number,y:number}} a
* @param {{x:number,y:number}} b
*/
Tff7b72export Tff7b72function Te6edf3pointerDistanceTb4b4b4(Te6edf3aTb4b4b4, Te6edf3bTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3dx Tff7b72= Te6edf3aTb4b4b4.Te6edf3x Tff7b72- Te6edf3bTb4b4b4.Te6edf3xTb4b4b4;
Tff7b72const Te6edf3dy Tff7b72= Te6edf3aTb4b4b4.Te6edf3y Tff7b72- Te6edf3bTb4b4b4.Te6edf3yTb4b4b4;
Tff7b72return Tffa657MathTb4b4b4.Te6edf3hypotTb4b4b4(Te6edf3dxTb4b4b4, Te6edf3dyTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Midpoint of two CSS points.
* @param {{x:number,y:number}} a
* @param {{x:number,y:number}} b
*/
Tff7b72export Tff7b72function Te6edf3pointerMidpointTb4b4b4(Te6edf3aTb4b4b4, Te6edf3bTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{ Te6edf3xTff7b72: Tb4b4b4(Te6edf3aTb4b4b4.Te6edf3x Tff7b72+ Te6edf3bTb4b4b4.Te6edf3xTb4b4b4) Tff7b72* T79c0ff0.5Tb4b4b4, Te6edf3yTff7b72: Tb4b4b4(Te6edf3aTb4b4b4.Te6edf3y Tff7b72+ Te6edf3bTb4b4b4.Te6edf3yTb4b4b4) Tff7b72* T79c0ff0.5 Tb4b4b4}Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {HTMLCanvasElement} [_canvas] optional host (capability is global)
*/
Tff7b72export Tff7b72function Te6edf3canUseVisualiserWebGLTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isVisualiserWebGLSceneReadyTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72return Tff7b72falseTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3WebGL2RenderingContext Tff7b72=== Ta5d6ff"undefined"Tb4b4b4) Tff7b72return Tff7b72falseTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Tffa657document Tff7b72=== Ta5d6ff"undefined"Tb4b4b4) Tff7b72return Tff7b72falseTb4b4b4;
Tff7b72const Te6edf3probe Tff7b72= Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"canvas"Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72!Tff7b72!Te6edf3tryCreateWebGL2ContextTb4b4b4(Te6edf3probeTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3hexToRgb01Tb4b4b4(Te6edf3hexTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3hex Tff7b72!== Ta5d6ff"string"Tb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72let Te6edf3h Tff7b72= Te6edf3hexTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3hTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"#"Tb4b4b4)Tb4b4b4) Te6edf3h Tff7b72= Te6edf3hTb4b4b4.Te6edf3sliceTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3hTb4b4b4.Te6edf3length Tff7b72=== T79c0ff3Tb4b4b4) Tb4b4b4{
Te6edf3h Tff7b72= Ta5d6ff`Tffd700${Te6edf3hTb4b4b4[T79c0ff0Tb4b4b4]Tffd700}Tffd700${Te6edf3hTb4b4b4[T79c0ff0Tb4b4b4]Tffd700}Tffd700${Te6edf3hTb4b4b4[T79c0ff1Tb4b4b4]Tffd700}Tffd700${Te6edf3hTb4b4b4[T79c0ff1Tb4b4b4]Tffd700}Tffd700${Te6edf3hTb4b4b4[T79c0ff2Tb4b4b4]Tffd700}Tffd700${Te6edf3hTb4b4b4[T79c0ff2Tb4b4b4]Tffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3hTb4b4b4.Te6edf3length Tff7b72!== T79c0ff6Tb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3n Tff7b72= Tffa657NumberTb4b4b4.Tffa657parseIntTb4b4b4(Te6edf3hTb4b4b4, T79c0ff16Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3rTff7b72: Tb4b4b4(Tb4b4b4(Te6edf3n Tff7b72>> T79c0ff16Tb4b4b4) Tff7b72& T79c0ff255Tb4b4b4) Tff7b72/ T79c0ff255Tb4b4b4,
Te6edf3gTff7b72: Tb4b4b4(Tb4b4b4(Te6edf3n Tff7b72>> T79c0ff8Tb4b4b4) Tff7b72& T79c0ff255Tb4b4b4) Tff7b72/ T79c0ff255Tb4b4b4,
Te6edf3bTff7b72: Tb4b4b4(Te6edf3n Tff7b72& T79c0ff255Tb4b4b4) Tff7b72/ T79c0ff255Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3colorFromNodeTb4b4b4(Te6edf3nodeTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3c Tff7b72= Te6edf3nodeTff7b72?Tb4b4b4.Te6edf3colorTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3c Tff7b72=== Ta5d6ff"string"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3rgb Tff7b72= Te6edf3hexToRgb01Tb4b4b4(Te6edf3cTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3rgbTb4b4b4) Tff7b72return Te6edf3rgbTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3c Tff7b72&& Tff7b72typeof Te6edf3c Tff7b72=== Ta5d6ff"object"Tb4b4b4) Tb4b4b4{
T8b949e// Border is the vivid badge color; background is a pale tint for vis-network.
Tff7b72const Te6edf3fill Tff7b72= Te6edf3cTb4b4b4.Te6edf3border Tff7b72|| Te6edf3cTb4b4b4.Te6edf3backgroundTb4b4b4;
Tff7b72const Te6edf3rgb Tff7b72= Te6edf3hexToRgb01Tb4b4b4(Te6edf3fillTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3rgbTb4b4b4) Tff7b72return Te6edf3rgbTb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3colorFromEdgeTb4b4b4(Te6edf3edgeTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3c Tff7b72= Te6edf3edgeTff7b72?Tb4b4b4.Te6edf3colorTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3c Tff7b72=== Ta5d6ff"string"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3rgb Tff7b72= Te6edf3hexToRgb01Tb4b4b4(Te6edf3cTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3rgbTb4b4b4) Tff7b72return Tb4b4b4{ Tb4b4b4...Te6edf3rgbTb4b4b4, Te6edf3aTff7b72: T79c0ff0.55 Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3c Tff7b72&& Tff7b72typeof Te6edf3c Tff7b72=== Ta5d6ff"object"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3rgb Tff7b72= Te6edf3hexToRgb01Tb4b4b4(Te6edf3cTb4b4b4.Te6edf3colorTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3a Tff7b72= Tff7b72typeof Te6edf3cTb4b4b4.Te6edf3opacity Tff7b72=== Ta5d6ff"number" Tff7b72? Te6edf3cTb4b4b4.Te6edf3opacity Tff7b72: T79c0ff0.55Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3rgbTb4b4b4) Tff7b72return Tb4b4b4{ Tb4b4b4...Te6edf3rgbTb4b4b4, Te6edf3a Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4{ Te6edf3rTff7b72: T79c0ff0.45Tb4b4b4, Te6edf3gTff7b72: T79c0ff0.45Tb4b4b4, Te6edf3bTff7b72: T79c0ff0.55Tb4b4b4, Te6edf3aTff7b72: T79c0ff0.45 Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3kindForNodeTb4b4b4(Te6edf3nodeTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3g Tff7b72= Te6edf3nodeTff7b72?Tb4b4b4.Te6edf3groupTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3g Tff7b72=== Ta5d6ff"me" Tff7b72|| Te6edf3nodeTff7b72?Tb4b4b4.Te6edf3id Tff7b72=== Ta5d6ff"me"Tb4b4b4) Tff7b72return Te6edf3KIND_METb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3g Tff7b72=== Ta5d6ff"discovered"Tb4b4b4) Tff7b72return Te6edf3KIND_DISCOVEREDTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3g Tff7b72=== Ta5d6ff"interface"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3img Tff7b72= Tffa657StringTb4b4b4(Te6edf3nodeTff7b72?Tb4b4b4.Te6edf3image Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3imgTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"disconnected"Tb4b4b4)Tb4b4b4) Tff7b72return Te6edf3KIND_IFACE_OFFTb4b4b4;
Tff7b72const Te6edf3border Tff7b72= Te6edf3nodeTff7b72?Tb4b4b4.Te6edf3colorTff7b72?Tb4b4b4.Te6edf3border Tff7b72|| Ta5d6ff""Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3border Tff7b72=== Ta5d6ff"#ef4444" Tff7b72|| Te6edf3border Tff7b72=== Ta5d6ff"#f87171"Tb4b4b4) Tff7b72return Te6edf3KIND_IFACE_OFFTb4b4b4;
Tff7b72return Te6edf3KIND_IFACE_ONTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3KIND_PEERTb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3sizeForNodeTb4b4b4(Te6edf3nodeTb4b4b4, Te6edf3kindTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3s Tff7b72= Tffa657NumberTb4b4b4(Te6edf3nodeTff7b72?Tb4b4b4.Te6edf3sizeTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3sTb4b4b4) Tff7b72&& Te6edf3s Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
T8b949e// Keep WebGL radii close to vis-network so glyphs stay readable.
Tff7b72return Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff18Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff48Tb4b4b4, Te6edf3s Tff7b72* T79c0ff0.9Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3kind Tff7b72=== Te6edf3KIND_METb4b4b4) Tff7b72return T79c0ff32Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3kind Tff7b72=== Te6edf3KIND_IFACE_ON Tff7b72|| Te6edf3kind Tff7b72=== Te6edf3KIND_IFACE_OFFTb4b4b4) Tff7b72return T79c0ff24Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3kind Tff7b72=== Te6edf3KIND_DISCOVEREDTb4b4b4) Tff7b72return T79c0ff20Tb4b4b4;
Tff7b72return T79c0ff22Tb4b4b4;
Tb4b4b4}
T8b949e/** Exported for unit tests. */
Tff7b72export Tff7b72function Te6edf3webglNodeSizeForTb4b4b4(Te6edf3nodeTb4b4b4, Te6edf3kindTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3sizeForNodeTb4b4b4(Te6edf3nodeTb4b4b4, Te6edf3kind Tff7b72== Tff7b72null Tff7b72? Te6edf3kindForNodeTb4b4b4(Te6edf3nodeTb4b4b4) Tff7b72: Te6edf3kindTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3imageForNodeTb4b4b4(Te6edf3nodeTb4b4b4, Te6edf3kindTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3nodeTff7b72?Tb4b4b4.Te6edf3image Tff7b72=== Ta5d6ff"string" Tff7b72&& Te6edf3nodeTb4b4b4.Te6edf3imageTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3nodeTb4b4b4.Te6edf3imageTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3DEFAULT_ICON_BY_KINDTb4b4b4[Te6edf3kindTb4b4b4] Tff7b72|| Tff7b72nullTb4b4b4;
Tb4b4b4}
T8b949e/**
* Convert vis-style graph nodes/edges into WASM scene SetRequest payload.
* @param {object[]} graphNodes
* @param {object[]} graphEdges
* @param {{width:number,height:number,camX?:number,camY?:number,zoom?:number}} view
*/
Tff7b72export Tff7b72function Te6edf3graphToSceneRequestTb4b4b4(Te6edf3graphNodesTb4b4b4, Te6edf3graphEdgesTb4b4b4, Te6edf3viewTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3nodes Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3n Tff7b72of Te6edf3graphNodes Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3nTff7b72?Tb4b4b4.Te6edf3idTb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72const Te6edf3kind Tff7b72= Te6edf3kindForNodeTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3rgb Tff7b72= Te6edf3colorFromNodeTb4b4b4(Te6edf3nTb4b4b4) Tff7b72|| Tb4b4b4{ Te6edf3rTff7b72: T79c0ff0.85Tb4b4b4, Te6edf3gTff7b72: T79c0ff0.85Tb4b4b4, Te6edf3bTff7b72: T79c0ff0.9 Tb4b4b4}Tb4b4b4;
Te6edf3nodesTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3idTff7b72: Tffa657StringTb4b4b4(Te6edf3nTb4b4b4.Te6edf3idTb4b4b4)Tb4b4b4,
Te6edf3xTff7b72: Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3nTb4b4b4.Te6edf3xTb4b4b4) Tff7b72? Te6edf3nTb4b4b4.Te6edf3x Tff7b72: T79c0ff0Tb4b4b4,
Te6edf3yTff7b72: Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3nTb4b4b4.Te6edf3yTb4b4b4) Tff7b72? Te6edf3nTb4b4b4.Te6edf3y Tff7b72: T79c0ff0Tb4b4b4,
Te6edf3massTff7b72: Te6edf3nTb4b4b4.Te6edf3id Tff7b72=== Ta5d6ff"me" Tff7b72? T79c0ff4 Tff7b72: Te6edf3nTb4b4b4.Te6edf3group Tff7b72=== Ta5d6ff"interface" Tff7b72? T79c0ff2.5 Tff7b72: T79c0ff1Tb4b4b4,
Te6edf3fixedTff7b72: Te6edf3nTb4b4b4.Te6edf3id Tff7b72=== Ta5d6ff"me"Tb4b4b4,
Te6edf3kindTb4b4b4,
Te6edf3sizeTff7b72: Te6edf3sizeForNodeTb4b4b4(Te6edf3nTb4b4b4, Te6edf3kindTb4b4b4)Tb4b4b4,
Te6edf3rTff7b72: Te6edf3rgbTb4b4b4.Te6edf3rTb4b4b4,
Te6edf3gTff7b72: Te6edf3rgbTb4b4b4.Te6edf3gTb4b4b4,
Te6edf3bTff7b72: Te6edf3rgbTb4b4b4.Te6edf3bTb4b4b4,
Te6edf3aTff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3edges Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3e Tff7b72of Te6edf3graphEdges Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3eTff7b72?Tb4b4b4.Tff7b72from Tff7b72|| Tff7b72!Te6edf3eTff7b72?Tb4b4b4.Te6edf3toTb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72const Te6edf3rgb Tff7b72= Te6edf3colorFromEdgeTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3edgesTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Tff7b72fromTff7b72: Tffa657StringTb4b4b4(Te6edf3eTb4b4b4.Tff7b72fromTb4b4b4)Tb4b4b4,
Te6edf3toTff7b72: Tffa657StringTb4b4b4(Te6edf3eTb4b4b4.Te6edf3toTb4b4b4)Tb4b4b4,
Te6edf3widthTff7b72: Tffa657NumberTb4b4b4(Te6edf3eTb4b4b4.Te6edf3widthTb4b4b4) Tff7b72|| T79c0ff1Tb4b4b4,
Te6edf3rTff7b72: Te6edf3rgbTb4b4b4.Te6edf3rTb4b4b4,
Te6edf3gTff7b72: Te6edf3rgbTb4b4b4.Te6edf3gTb4b4b4,
Te6edf3bTff7b72: Te6edf3rgbTb4b4b4.Te6edf3bTb4b4b4,
Te6edf3aTff7b72: Te6edf3rgbTb4b4b4.Te6edf3aTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4{
Te6edf3nodesTb4b4b4,
Te6edf3edgesTb4b4b4,
Te6edf3widthTff7b72: Te6edf3viewTff7b72?Tb4b4b4.Te6edf3width Tff7b72|| T79c0ff800Tb4b4b4,
Te6edf3heightTff7b72: Te6edf3viewTff7b72?Tb4b4b4.Te6edf3height Tff7b72|| T79c0ff600Tb4b4b4,
Te6edf3cam_xTff7b72: Te6edf3viewTff7b72?Tb4b4b4.Te6edf3camX Tff7b72?? T79c0ff0Tb4b4b4,
Te6edf3cam_yTff7b72: Te6edf3viewTff7b72?Tb4b4b4.Te6edf3camY Tff7b72?? T79c0ff0Tb4b4b4,
T8b949e// zoom === 0 means "preserve camera" for Scene.Set. Do not coerce to 1.
Te6edf3zoomTff7b72: Tff7b72typeof Te6edf3viewTff7b72?Tb4b4b4.Te6edf3zoom Tff7b72=== Ta5d6ff"number" Tff7b72? Te6edf3viewTb4b4b4.Te6edf3zoom Tff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {HTMLCanvasElement} canvas
* @param {{
* getLiveLayout: () => boolean,
* isDark: () => boolean,
* onNodeActivate?: (id: string, meta: object|null) => void,
* onHover?: (id: string|null, meta: object|null, cssX: number, cssY: number) => void,
* }} hooks
*/
Tff7b72export Tff7b72function Te6edf3createVisualiserWebGLEngineTb4b4b4(Te6edf3canvasTb4b4b4, Te6edf3hooks Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3gl Tff7b72= Te6edf3tryCreateWebGL2ContextTb4b4b4(Te6edf3canvasTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3glTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"WebGL2 unavailable"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isVisualiserWebGLSceneReadyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"WASM scene unavailable"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3renderer Tff7b72= Te6edf3createNetworkVisualiserWebGLTb4b4b4(Te6edf3canvasTb4b4b4, Te6edf3glTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3metaById Tff7b72= Tff7b72new Tffa657MapTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3indexById Tff7b72= Tff7b72new Tffa657MapTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e/** @type {(string|null)[]} */
Tff7b72let Te6edf3imageByIndex Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
T8b949e/** @type {(string|null)[]} */
Tff7b72let Te6edf3labelByIndex Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
T8b949e/** @type {(string|null)[]} */
Tff7b72let Te6edf3idByIndex Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
T8b949e/** @type {{useTex:number,u:number,v:number}[]} */
Tff7b72let Te6edf3texMeta Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72let Te6edf3drawNodeScratch Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3rafId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72let Te6edf3running Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72let Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72let Te6edf3pointerMode Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72let Te6edf3lastX Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3lastY Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3nodeCount Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3edgeCount Tff7b72= T79c0ff0Tb4b4b4;
T8b949e/** @type {string|null} */
Tff7b72let Te6edf3hoverId Tff7b72= Tff7b72nullTb4b4b4;
T8b949e/** @type {Map<number,{x:number,y:number}>} */
Tff7b72const Te6edf3pointers Tff7b72= Tff7b72new Tffa657MapTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3pinchLastDist Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3iconLoadGen Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72function Te6edf3cssPointTb4b4b4(Te6edf3evTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3rect Tff7b72= Te6edf3canvasTb4b4b4.Te6edf3getBoundingClientRectTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3xTff7b72: Te6edf3evTb4b4b4.Te6edf3clientX Tff7b72- Te6edf3rectTb4b4b4.Te6edf3leftTb4b4b4,
Te6edf3yTff7b72: Te6edf3evTb4b4b4.Te6edf3clientY Tff7b72- Te6edf3rectTb4b4b4.Te6edf3topTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3callSceneTb4b4b4(Te6edf3nameTb4b4b4, Tb4b4b4...Te6edf3argsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3fn Tff7b72= Tffa657globalThisTb4b4b4[Te6edf3nameTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3fn Tff7b72!== Ta5d6ff"function"Tb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72return Te6edf3fnTb4b4b4(Tb4b4b4...Te6edf3argsTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3warnTb4b4b4(Ta5d6ff"Visualiser scene call failed:"Tb4b4b4, Te6edf3nameTb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72function Te6edf3rebuildTexMetaTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3texMeta Tff7b72= Te6edf3imageByIndexTb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3urlTb4b4b4) Tff7b72return Tb4b4b4{ Te6edf3useTexTff7b72: T79c0ff0Tb4b4b4, Te6edf3uTff7b72: T79c0ff0Tb4b4b4, Te6edf3vTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3slot Tff7b72= Te6edf3rendererTb4b4b4.Te6edf3getIconSlotTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3slot Tff7b72== Tff7b72nullTb4b4b4) Tff7b72return Tb4b4b4{ Te6edf3useTexTff7b72: T79c0ff0Tb4b4b4, Te6edf3uTff7b72: T79c0ff0Tb4b4b4, Te6edf3vTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3uv Tff7b72= Te6edf3rendererTb4b4b4.Te6edf3iconUvTb4b4b4(Te6edf3slotTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3useTexTff7b72: T79c0ff1Tb4b4b4, Te6edf3uTff7b72: Te6edf3uvTb4b4b4.Te6edf3uTb4b4b4, Te6edf3vTff7b72: Te6edf3uvTb4b4b4.Te6edf3v Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72async Tff7b72function Te6edf3loadIconsForCurrentGraphTb4b4b4(Te6edf3generationTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3urls Tff7b72= Tb4b4b4[Tb4b4b4...Tff7b72new Tffa657SetTb4b4b4(Te6edf3imageByIndexTb4b4b4.Te6edf3filterTb4b4b4(Tffa657BooleanTb4b4b4)Tb4b4b4)Tb4b4b4]Tb4b4b4;
Tff7b72await Tffa657PromiseTb4b4b4.Te6edf3allTb4b4b4(
Te6edf3urlsTb4b4b4.Te6edf3mapTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72await Te6edf3rendererTb4b4b4.Te6edf3ensureIconTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3running Tff7b72|| Te6edf3generation Tff7b72!== Te6edf3iconLoadGenTb4b4b4) Tff7b72returnTb4b4b4;
Te6edf3rebuildTexMetaTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3setGraphTb4b4b4(Te6edf3graphNodesTb4b4b4, Te6edf3graphEdgesTb4b4b4, Te6edf3viewOpts Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3metaByIdTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3indexByIdTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3imageByIndex Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Te6edf3labelByIndex Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Te6edf3idByIndex Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Te6edf3hoverId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72let Te6edf3idx Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3n Tff7b72of Te6edf3graphNodes Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3nTff7b72?Tb4b4b4.Te6edf3idTb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72const Te6edf3id Tff7b72= Tffa657StringTb4b4b4(Te6edf3nTb4b4b4.Te6edf3idTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3kind Tff7b72= Te6edf3kindForNodeTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4;
Te6edf3metaByIdTb4b4b4.Te6edf3setTb4b4b4(Te6edf3idTb4b4b4, Tb4b4b4{
Te6edf3idTb4b4b4,
Te6edf3labelTff7b72: Te6edf3nTb4b4b4.Te6edf3label Tff7b72|| Ta5d6ff""Tb4b4b4,
Te6edf3titleTff7b72: Te6edf3nTb4b4b4.Te6edf3title Tff7b72|| Ta5d6ff""Tb4b4b4,
Te6edf3groupTff7b72: Te6edf3nTb4b4b4.Te6edf3group Tff7b72|| Ta5d6ff""Tb4b4b4,
Te6edf3announceTff7b72: Te6edf3nTb4b4b4.Te6edf3_announce Tff7b72|| Tff7b72nullTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3indexByIdTb4b4b4.Te6edf3setTb4b4b4(Te6edf3idTb4b4b4, Te6edf3idxTb4b4b4)Tb4b4b4;
Te6edf3idByIndexTb4b4b4[Te6edf3idxTb4b4b4] Tff7b72= Te6edf3idTb4b4b4;
Te6edf3imageByIndexTb4b4b4[Te6edf3idxTb4b4b4] Tff7b72= Te6edf3imageForNodeTb4b4b4(Te6edf3nTb4b4b4, Te6edf3kindTb4b4b4)Tb4b4b4;
Te6edf3labelByIndexTb4b4b4[Te6edf3idxTb4b4b4] Tff7b72= Tff7b72typeof Te6edf3nTb4b4b4.Te6edf3label Tff7b72=== Ta5d6ff"string" Tff7b72&& Te6edf3nTb4b4b4.Te6edf3label Tff7b72? Te6edf3nTb4b4b4.Te6edf3label Tff7b72: Tff7b72nullTb4b4b4;
Te6edf3idx Tff7b72+= T79c0ff1Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3size Tff7b72= Te6edf3rendererTb4b4b4.Te6edf3resizeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3preserveCamera Tff7b72= Te6edf3viewOptsTb4b4b4.Te6edf3preserveCamera Tff7b72!== Tff7b72false Tff7b72&& Te6edf3nodeCount Tff7b72> T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3prevCam Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3preserveCameraTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3buf Tff7b72= Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserSceneGetDrawBuffers"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3buf Tff7b72&& Te6edf3bufTb4b4b4.Te6edf3ok Tff7b72!== Tff7b72falseTb4b4b4) Tb4b4b4{
Te6edf3prevCam Tff7b72= Tb4b4b4{
Te6edf3xTff7b72: Te6edf3bufTb4b4b4.Te6edf3camX Tff7b72|| T79c0ff0Tb4b4b4,
Te6edf3yTff7b72: Te6edf3bufTb4b4b4.Te6edf3camY Tff7b72|| T79c0ff0Tb4b4b4,
Te6edf3zoomTff7b72: Te6edf3bufTb4b4b4.Te6edf3zoom Tff7b72> T79c0ff0 Tff7b72? Te6edf3bufTb4b4b4.Te6edf3zoom Tff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72const Te6edf3req Tff7b72= Te6edf3graphToSceneRequestTb4b4b4(Te6edf3graphNodesTb4b4b4, Te6edf3graphEdgesTb4b4b4, Tb4b4b4{
Te6edf3widthTff7b72: Te6edf3sizeTb4b4b4.Te6edf3widthTb4b4b4,
Te6edf3heightTff7b72: Te6edf3sizeTb4b4b4.Te6edf3heightTb4b4b4,
Te6edf3camXTff7b72: Te6edf3viewOptsTb4b4b4.Te6edf3camX Tff7b72?? T79c0ff0Tb4b4b4,
Te6edf3camYTff7b72: Te6edf3viewOptsTb4b4b4.Te6edf3camY Tff7b72?? T79c0ff0Tb4b4b4,
T8b949e// 0 = Scene.Set keeps the current pan/zoom (auto-refresh must not reset).
Te6edf3zoomTff7b72: Te6edf3preserveCamera Tff7b72? T79c0ff0 Tff7b72: Te6edf3viewOptsTb4b4b4.Te6edf3zoom Tff7b72> T79c0ff0 Tff7b72? Te6edf3viewOptsTb4b4b4.Te6edf3zoom Tff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3got Tff7b72= Te6edf3callVisualiserWasmJsonTb4b4b4(Ta5d6ff"meshchatxVisualiserSceneSet"Tb4b4b4, Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Te6edf3reqTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3got Tff7b72|| Te6edf3gotTb4b4b4.Te6edf3ok Tff7b72=== Tff7b72falseTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Te6edf3gotTff7b72?Tb4b4b4.Te6edf3error Tff7b72|| Ta5d6ff"SceneSet failed"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3nodeCount Tff7b72= Te6edf3gotTb4b4b4.Te6edf3nodes Tff7b72|| T79c0ff0Tb4b4b4;
Te6edf3edgeCount Tff7b72= Te6edf3gotTb4b4b4.Te6edf3edges Tff7b72|| T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3preserveCamera Tff7b72&& Te6edf3prevCamTb4b4b4) Tb4b4b4{
Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserSceneSetCamera"Tb4b4b4, Te6edf3prevCamTb4b4b4.Te6edf3xTb4b4b4, Te6edf3prevCamTb4b4b4.Te6edf3yTb4b4b4, Te6edf3prevCamTb4b4b4.Te6edf3zoomTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3rebuildTexMetaTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3iconLoadGen Tff7b72+= T79c0ff1Tb4b4b4;
Tff7b72void Te6edf3loadIconsForCurrentGraphTb4b4b4(Te6edf3iconLoadGenTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Apply deferred LXMF / custom icon URLs after paint.
* @param {{id:string,image:string}[]} updates
*/
Tff7b72function Te6edf3updateNodeImagesTb4b4b4(Te6edf3updatesTb4b4b4) Tb4b4b4{
Tff7b72let Te6edf3changed Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3u Tff7b72of Te6edf3updates Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3uTff7b72?Tb4b4b4.Te6edf3id Tff7b72|| Tff7b72!Te6edf3uTff7b72?Tb4b4b4.Te6edf3imageTb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72const Te6edf3i Tff7b72= Te6edf3indexByIdTb4b4b4.Te6edf3getTb4b4b4(Tffa657StringTb4b4b4(Te6edf3uTb4b4b4.Te6edf3idTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3i Tff7b72== Tff7b72nullTb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3imageByIndexTb4b4b4[Te6edf3iTb4b4b4] Tff7b72=== Te6edf3uTb4b4b4.Te6edf3imageTb4b4b4) Tff7b72continueTb4b4b4;
Te6edf3imageByIndexTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3uTb4b4b4.Te6edf3imageTb4b4b4;
Te6edf3changed Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3changedTb4b4b4) Tff7b72returnTb4b4b4;
Te6edf3iconLoadGen Tff7b72+= T79c0ff1Tb4b4b4;
Tff7b72void Te6edf3loadIconsForCurrentGraphTb4b4b4(Te6edf3iconLoadGenTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3getPositionsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3got Tff7b72= Te6edf3callVisualiserWasmJsonTb4b4b4(Ta5d6ff"meshchatxVisualiserSceneGetPositions"Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3gotTff7b72?Tb4b4b4.Te6edf3positions Tff7b72&& Tff7b72typeof Te6edf3gotTb4b4b4.Te6edf3positions Tff7b72=== Ta5d6ff"object" Tff7b72? Te6edf3gotTb4b4b4.Te6edf3positions Tff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3getCountsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{ Te6edf3nodesTff7b72: Te6edf3nodeCountTb4b4b4, Te6edf3edgesTff7b72: Te6edf3edgeCount Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3setLiveLayoutTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3frameTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3runningTb4b4b4) Tff7b72returnTb4b4b4;
Te6edf3rafId Tff7b72= Te6edf3requestAnimationFrameTb4b4b4(Te6edf3frameTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3live Tff7b72= Tff7b72typeof Te6edf3hooksTb4b4b4.Te6edf3getLiveLayout Tff7b72=== Ta5d6ff"function" Tff7b72? Te6edf3hooksTb4b4b4.Te6edf3getLiveLayoutTb4b4b4(Tb4b4b4) Tff7b72: Tff7b72falseTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3live Tff7b72&& Te6edf3pointerMode Tff7b72!== Ta5d6ff"drag"Tb4b4b4) Tb4b4b4{
Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserSceneTick"Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3dirty Tff7b72&& Tff7b72!Te6edf3liveTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3buf Tff7b72= Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserSceneGetDrawBuffers"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3buf Tff7b72|| Te6edf3bufTb4b4b4.Te6edf3ok Tff7b72=== Tff7b72falseTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3camera Tff7b72= Tb4b4b4{
Te6edf3xTff7b72: Te6edf3bufTb4b4b4.Te6edf3camX Tff7b72|| T79c0ff0Tb4b4b4,
Te6edf3yTff7b72: Te6edf3bufTb4b4b4.Te6edf3camY Tff7b72|| T79c0ff0Tb4b4b4,
Te6edf3zoomTff7b72: Te6edf3bufTb4b4b4.Te6edf3zoom Tff7b72> T79c0ff0 Tff7b72? Te6edf3bufTb4b4b4.Te6edf3zoom Tff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3dark Tff7b72= Tff7b72typeof Te6edf3hooksTb4b4b4.Te6edf3isDark Tff7b72=== Ta5d6ff"function" Tff7b72? Te6edf3hooksTb4b4b4.Te6edf3isDarkTb4b4b4(Tb4b4b4) Tff7b72: Tff7b72falseTb4b4b4;
Tff7b72const Te6edf3sceneCount Tff7b72= Te6edf3bufTb4b4b4.Te6edf3nodes Tff7b72&& Te6edf3bufTb4b4b4.Te6edf3nodesTb4b4b4.Te6edf3length Tff7b72? Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3bufTb4b4b4.Te6edf3nodesTb4b4b4.Te6edf3length Tff7b72/ Te6edf3SCENE_NODE_STRIDETb4b4b4) Tff7b72: T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3need Tff7b72= Te6edf3sceneCount Tff7b72* Te6edf3NODE_STRIDETb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3drawNodeScratchTb4b4b4.Te6edf3length Tff7b72< Te6edf3needTb4b4b4) Tb4b4b4{
Te6edf3drawNodeScratch Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(Te6edf3needTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3drawNodes Tff7b72= Te6edf3mergeSceneNodesWithTexturesTb4b4b4(Te6edf3bufTb4b4b4.Te6edf3nodesTb4b4b4, Te6edf3texMetaTb4b4b4, Te6edf3drawNodeScratchTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3labels Tff7b72= Te6edf3collectWebGLLabelsTb4b4b4(Tb4b4b4{
Te6edf3zoomTff7b72: Te6edf3cameraTb4b4b4.Te6edf3zoomTb4b4b4,
Te6edf3sceneCountTb4b4b4,
Te6edf3nodesTff7b72: Te6edf3bufTb4b4b4.Te6edf3nodesTb4b4b4,
Te6edf3labelByIndexTb4b4b4,
Te6edf3idByIndexTb4b4b4,
Te6edf3hoverIdTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3size Tff7b72= Te6edf3rendererTb4b4b4.Te6edf3drawTb4b4b4(Te6edf3drawNodesTb4b4b4, Te6edf3bufTb4b4b4.Te6edf3edgesTb4b4b4, Te6edf3cameraTb4b4b4, Te6edf3darkTb4b4b4, Te6edf3labelsTb4b4b4)Tb4b4b4;
Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserSceneResize"Tb4b4b4, Te6edf3sizeTb4b4b4.Te6edf3widthTb4b4b4, Te6edf3sizeTb4b4b4.Te6edf3heightTb4b4b4)Tb4b4b4;
Te6edf3nodeCount Tff7b72= Te6edf3bufTb4b4b4.Te6edf3nodeCount Tff7b72|| Te6edf3nodeCountTb4b4b4;
Te6edf3edgeCount Tff7b72= Te6edf3bufTb4b4b4.Te6edf3edgeCount Tff7b72|| Te6edf3edgeCountTb4b4b4;
Te6edf3dirty Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3activePointerPairTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3pointersTb4b4b4.Te6edf3size Tff7b72< T79c0ff2Tb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3pts Tff7b72= Tb4b4b4[Tb4b4b4...Te6edf3pointersTb4b4b4.Te6edf3valuesTb4b4b4(Tb4b4b4)Tb4b4b4]Tb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3aTff7b72: Te6edf3ptsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3bTff7b72: Te6edf3ptsTb4b4b4[T79c0ff1Tb4b4b4] Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3onPointerDownTb4b4b4(Te6edf3evTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3evTb4b4b4.Te6edf3pointerType Tff7b72=== Ta5d6ff"mouse" Tff7b72&& Te6edf3evTb4b4b4.Te6edf3button Tff7b72!== T79c0ff0Tb4b4b4) Tff7b72returnTb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3setPointerCaptureTff7b72?Tb4b4b4.Tb4b4b4(Te6edf3evTb4b4b4.Te6edf3pointerIdTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3p Tff7b72= Te6edf3cssPointTb4b4b4(Te6edf3evTb4b4b4)Tb4b4b4;
Te6edf3pointersTb4b4b4.Te6edf3setTb4b4b4(Te6edf3evTb4b4b4.Te6edf3pointerIdTb4b4b4, Te6edf3pTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3pointersTb4b4b4.Te6edf3size Tff7b72>= T79c0ff2Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3pointerMode Tff7b72=== Ta5d6ff"drag"Tb4b4b4) Tb4b4b4{
Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserSceneDragEnd"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3pointerMode Tff7b72= Ta5d6ff"pinch"Tb4b4b4;
Tff7b72const Te6edf3pair Tff7b72= Te6edf3activePointerPairTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3pinchLastDist Tff7b72= Te6edf3pair Tff7b72? Te6edf3pointerDistanceTb4b4b4(Te6edf3pairTb4b4b4.Te6edf3aTb4b4b4, Te6edf3pairTb4b4b4.Te6edf3bTb4b4b4) Tff7b72: T79c0ff0Tb4b4b4;
Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3lastX Tff7b72= Te6edf3pTb4b4b4.Te6edf3xTb4b4b4;
Te6edf3lastY Tff7b72= Te6edf3pTb4b4b4.Te6edf3yTb4b4b4;
Tff7b72const Te6edf3id Tff7b72= Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserScenePick"Tb4b4b4, Te6edf3pTb4b4b4.Te6edf3xTb4b4b4, Te6edf3pTb4b4b4.Te6edf3yTb4b4b4, T79c0ff16Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3idTb4b4b4) Tb4b4b4{
Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserSceneDragStart"Tb4b4b4, Te6edf3idTb4b4b4)Tb4b4b4;
Te6edf3pointerMode Tff7b72= Ta5d6ff"drag"Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3pointerMode Tff7b72= Ta5d6ff"pan"Tb4b4b4;
Tb4b4b4}
Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3onPointerMoveTb4b4b4(Te6edf3evTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3p Tff7b72= Te6edf3cssPointTb4b4b4(Te6edf3evTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3pointersTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3evTb4b4b4.Te6edf3pointerIdTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3pointersTb4b4b4.Te6edf3setTb4b4b4(Te6edf3evTb4b4b4.Te6edf3pointerIdTb4b4b4, Te6edf3pTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3pointerMode Tff7b72=== Ta5d6ff"pinch"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3pair Tff7b72= Te6edf3activePointerPairTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3pair Tff7b72|| Te6edf3pinchLastDist Tff7b72<= T79c0ff0Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3dist Tff7b72= Te6edf3pointerDistanceTb4b4b4(Te6edf3pairTb4b4b4.Te6edf3aTb4b4b4, Te6edf3pairTb4b4b4.Te6edf3bTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3dist Tff7b72<= T79c0ff0Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3factor Tff7b72= Te6edf3dist Tff7b72/ Te6edf3pinchLastDistTb4b4b4;
Tff7b72if Tb4b4b4(Tffa657MathTb4b4b4.Te6edf3absTb4b4b4(Te6edf3factor Tff7b72- T79c0ff1Tb4b4b4) Tff7b72> T79c0ff0.001Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3mid Tff7b72= Te6edf3pointerMidpointTb4b4b4(Te6edf3pairTb4b4b4.Te6edf3aTb4b4b4, Te6edf3pairTb4b4b4.Te6edf3bTb4b4b4)Tb4b4b4;
Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserSceneZoomAt"Tb4b4b4, Te6edf3midTb4b4b4.Te6edf3xTb4b4b4, Te6edf3midTb4b4b4.Te6edf3yTb4b4b4, Te6edf3factorTb4b4b4)Tb4b4b4;
Te6edf3pinchLastDist Tff7b72= Te6edf3distTb4b4b4;
Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3pointerMode Tff7b72=== Ta5d6ff"drag"Tb4b4b4) Tb4b4b4{
Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserSceneDragTo"Tb4b4b4, Te6edf3pTb4b4b4.Te6edf3xTb4b4b4, Te6edf3pTb4b4b4.Te6edf3yTb4b4b4)Tb4b4b4;
Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3pointerMode Tff7b72=== Ta5d6ff"pan"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3zoomBuf Tff7b72= Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserSceneGetDrawBuffers"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3zoom Tff7b72= Te6edf3zoomBufTff7b72?Tb4b4b4.Te6edf3zoom Tff7b72> T79c0ff0 Tff7b72? Te6edf3zoomBufTb4b4b4.Te6edf3zoom Tff7b72: T79c0ff1Tb4b4b4;
Tff7b72const Te6edf3dx Tff7b72= Tb4b4b4(Te6edf3lastX Tff7b72- Te6edf3pTb4b4b4.Te6edf3xTb4b4b4) Tff7b72/ Te6edf3zoomTb4b4b4;
Tff7b72const Te6edf3dy Tff7b72= Tb4b4b4(Te6edf3lastY Tff7b72- Te6edf3pTb4b4b4.Te6edf3yTb4b4b4) Tff7b72/ Te6edf3zoomTb4b4b4;
Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserScenePanBy"Tb4b4b4, Te6edf3dxTb4b4b4, Te6edf3dyTb4b4b4)Tb4b4b4;
Te6edf3lastX Tff7b72= Te6edf3pTb4b4b4.Te6edf3xTb4b4b4;
Te6edf3lastY Tff7b72= Te6edf3pTb4b4b4.Te6edf3yTb4b4b4;
Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72const Te6edf3id Tff7b72= Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserScenePick"Tb4b4b4, Te6edf3pTb4b4b4.Te6edf3xTb4b4b4, Te6edf3pTb4b4b4.Te6edf3yTb4b4b4, T79c0ff14Tb4b4b4) Tff7b72|| Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3id Tff7b72!== Te6edf3hoverIdTb4b4b4) Tb4b4b4{
Te6edf3hoverId Tff7b72= Te6edf3idTb4b4b4;
Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3hooksTb4b4b4.Te6edf3onHover Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Te6edf3hooksTb4b4b4.Te6edf3onHoverTb4b4b4(Te6edf3idTb4b4b4, Te6edf3id Tff7b72? Te6edf3metaByIdTb4b4b4.Te6edf3getTb4b4b4(Te6edf3idTb4b4b4) Tff7b72|| Tff7b72null Tff7b72: Tff7b72nullTb4b4b4, Te6edf3pTb4b4b4.Te6edf3xTb4b4b4, Te6edf3pTb4b4b4.Te6edf3yTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72function Te6edf3onPointerUpTb4b4b4(Te6edf3evTb4b4b4) Tb4b4b4{
Te6edf3pointersTb4b4b4.Tff7b72deleteTb4b4b4(Te6edf3evTb4b4b4.Te6edf3pointerIdTb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3canvasTb4b4b4.Te6edf3releasePointerCaptureTff7b72?Tb4b4b4.Tb4b4b4(Te6edf3evTb4b4b4.Te6edf3pointerIdTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e/* ignore */
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3pointerMode Tff7b72=== Ta5d6ff"pinch"Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3pointersTb4b4b4.Te6edf3size Tff7b72>= T79c0ff2Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3pair Tff7b72= Te6edf3activePointerPairTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3pinchLastDist Tff7b72= Te6edf3pair Tff7b72? Te6edf3pointerDistanceTb4b4b4(Te6edf3pairTb4b4b4.Te6edf3aTb4b4b4, Te6edf3pairTb4b4b4.Te6edf3bTb4b4b4) Tff7b72: T79c0ff0Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3pointersTb4b4b4.Te6edf3size Tff7b72=== T79c0ff1Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3remaining Tff7b72= Tb4b4b4[Tb4b4b4...Te6edf3pointersTb4b4b4.Te6edf3valuesTb4b4b4(Tb4b4b4)Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Te6edf3lastX Tff7b72= Te6edf3remainingTb4b4b4.Te6edf3xTb4b4b4;
Te6edf3lastY Tff7b72= Te6edf3remainingTb4b4b4.Te6edf3yTb4b4b4;
Te6edf3pointerMode Tff7b72= Ta5d6ff"pan"Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3pointerMode Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3pointerMode Tff7b72=== Ta5d6ff"drag"Tb4b4b4) Tb4b4b4{
Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserSceneDragEnd"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3pointersTb4b4b4.Te6edf3size Tff7b72=== T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3pointerMode Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3onDblClickTb4b4b4(Te6edf3evTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3p Tff7b72= Te6edf3cssPointTb4b4b4(Te6edf3evTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3id Tff7b72= Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserScenePick"Tb4b4b4, Te6edf3pTb4b4b4.Te6edf3xTb4b4b4, Te6edf3pTb4b4b4.Te6edf3yTb4b4b4, T79c0ff16Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3idTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3hooksTb4b4b4.Te6edf3onNodeActivate Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Te6edf3hooksTb4b4b4.Te6edf3onNodeActivateTb4b4b4(Te6edf3idTb4b4b4, Te6edf3metaByIdTb4b4b4.Te6edf3getTb4b4b4(Te6edf3idTb4b4b4) Tff7b72|| Tff7b72nullTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72function Te6edf3onWheelTb4b4b4(Te6edf3evTb4b4b4) Tb4b4b4{
Te6edf3evTb4b4b4.Te6edf3preventDefaultTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3p Tff7b72= Te6edf3cssPointTb4b4b4(Te6edf3evTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3factor Tff7b72= Te6edf3evTb4b4b4.Te6edf3deltaY Tff7b72< T79c0ff0 Tff7b72? T79c0ff1.12 Tff7b72: T79c0ff1 Tff7b72/ T79c0ff1.12Tb4b4b4;
Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserSceneZoomAt"Tb4b4b4, Te6edf3pTb4b4b4.Te6edf3xTb4b4b4, Te6edf3pTb4b4b4.Te6edf3yTb4b4b4, Te6edf3factorTb4b4b4)Tb4b4b4;
Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3onResizeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3size Tff7b72= Te6edf3rendererTb4b4b4.Te6edf3resizeTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3callSceneTb4b4b4(Ta5d6ff"meshchatxVisualiserSceneResize"Tb4b4b4, Te6edf3sizeTb4b4b4.Te6edf3widthTb4b4b4, Te6edf3sizeTb4b4b4.Te6edf3heightTb4b4b4)Tb4b4b4;
Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Te6edf3canvasTb4b4b4.Te6edf3styleTb4b4b4.Te6edf3touchAction Tff7b72= Ta5d6ff"none"Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"pointerdown"Tb4b4b4, Te6edf3onPointerDownTb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"pointermove"Tb4b4b4, Te6edf3onPointerMoveTb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"pointerup"Tb4b4b4, Te6edf3onPointerUpTb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"pointercancel"Tb4b4b4, Te6edf3onPointerUpTb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"dblclick"Tb4b4b4, Te6edf3onDblClickTb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"wheel"Tb4b4b4, Te6edf3onWheelTb4b4b4, Tb4b4b4{ Te6edf3passiveTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"resize"Tb4b4b4, Te6edf3onResizeTb4b4b4)Tb4b4b4;
Te6edf3rafId Tff7b72= Te6edf3requestAnimationFrameTb4b4b4(Te6edf3frameTb4b4b4)Tb4b4b4;
Tff7b72function Te6edf3destroyTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3running Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3iconLoadGen Tff7b72+= T79c0ff1Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3rafId Tff7b72!= Tff7b72nullTb4b4b4) Te6edf3cancelAnimationFrameTb4b4b4(Te6edf3rafIdTb4b4b4)Tb4b4b4;
Te6edf3rafId Tff7b72= Tff7b72nullTb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3removeEventListenerTb4b4b4(Ta5d6ff"pointerdown"Tb4b4b4, Te6edf3onPointerDownTb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3removeEventListenerTb4b4b4(Ta5d6ff"pointermove"Tb4b4b4, Te6edf3onPointerMoveTb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3removeEventListenerTb4b4b4(Ta5d6ff"pointerup"Tb4b4b4, Te6edf3onPointerUpTb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3removeEventListenerTb4b4b4(Ta5d6ff"pointercancel"Tb4b4b4, Te6edf3onPointerUpTb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3removeEventListenerTb4b4b4(Ta5d6ff"dblclick"Tb4b4b4, Te6edf3onDblClickTb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3removeEventListenerTb4b4b4(Ta5d6ff"wheel"Tb4b4b4, Te6edf3onWheelTb4b4b4)Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3removeEventListenerTb4b4b4(Ta5d6ff"resize"Tb4b4b4, Te6edf3onResizeTb4b4b4)Tb4b4b4;
Te6edf3pointersTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3rendererTb4b4b4.Te6edf3destroyTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3metaByIdTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3indexByIdTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3imageByIndex Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Te6edf3labelByIndex Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Te6edf3idByIndex Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Te6edf3hoverId Tff7b72= Tff7b72nullTb4b4b4;
Te6edf3texMeta Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4{
Te6edf3setGraphTb4b4b4,
Te6edf3updateNodeImagesTb4b4b4,
Te6edf3getPositionsTb4b4b4,
Te6edf3getCountsTb4b4b4,
Te6edf3setLiveLayoutTb4b4b4,
Te6edf3destroyTb4b4b4,
Te6edf3requestRedrawTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3dirty Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────